home *** CD-ROM | disk | FTP | other *** search
- /* ===============
- * AEAMetatoken.cc
- * ===============
- */
-
- #include "AEADebugging.h"
-
- #include <Errors.h>
-
- #include "AEAMetatoken.hh"
- #include "AEAToken.hh"
- #include "AEATokenDesc.hh"
- #include "AEATokenDescList.hh"
- #include "AEATokenModel.hh"
-
- // AEAMetatokenX
-
- AEAMetatokenX::AEAMetatokenX(AEAToken &inToken)
- : mToken(&inToken), refCount(1), owned(true)
- {
-
- }
-
- AEAMetatokenX::~AEAMetatokenX()
- {
- if (owned) {
- delete mToken;
- }
- }
-
- void
- AEAMetatokenX::Retain()
- {
- refCount++;
- }
-
- void
- AEAMetatokenX::Release()
- {
- if (--refCount == 0) {
- delete this;
- }
- }
-
-
- // AEAMetatoken
-
- AEAMetatoken::AEAMetatoken(AEDesc inAEDesc)
- : mX(*new AEAMetatokenX(*NewToken(inAEDesc)))
- {
-
- }
-
- AEAMetatoken::AEAMetatoken(const AEAMetatoken &inMetatoken)
- : mX(inMetatoken.mX)
- {
- mX.Retain();
- }
-
- AEAMetatoken::~AEAMetatoken()
- {
- mX.Release();
- }
-
- AEAMetatoken
- AEAMetatoken::operator=(const AEAMetatoken &inMetatoken)
- {
- throw;
- }
-
- void
- AEAMetatoken::MakeDataDescriptor(AEDesc &outAEDesc)
- {
- Ref().MakeDataDescriptor(outAEDesc);
- }
-
- AEAToken &
- AEAMetatoken::Ref()
- {
- ThrowIfNULL_(mX.mToken);
- return *mX.mToken;
- }
-
- AEAToken *
- AEAMetatoken::NewToken(const AEDesc &inAEDesc)
- {
- AEAToken *token;
- switch (inAEDesc.descriptorType) {
- case typeModelToken:
- //return NewObjectToken(inAEDesc);
- token = **(AEATokenModel ***)inAEDesc.dataHandle;
- break;
- case typeAEList:
- token = new AEATokenDescList(inAEDesc);
- break;
- case typeNull:
- //break;
- default: {
- token = new AEATokenDesc(inAEDesc);
- break;
- }
- }
- //token->Duplicate(inAEDesc);
- return token;
- }
-